﻿using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework.Input; 
using Microsoft.Xna.Framework;

using GreyGate.Screens;

namespace GreyGate.Utils 
{ 
    public class Keyboard 
    { 
        public KeyboardState CurrentKeyboardState, LastKeyboardState; 
        
        // Sagt, ob Esc gedrückt wurde
        public bool PauseOrQuit 
        {             
            get { return IsNewKeyPress(Keys.Escape); }             
        } 
        
        // sagt, ob Enter gedrückt wurde
        public bool MenuSelection 
        { 
            get { return IsNewKeyPress(Keys.Enter); } 
        }

        // sagt, ob die Pfeiltaste oben gedrückt wurde
        public bool Up 
        {
            get
            {
                if (ScreenManager.gameState == GameState.Play)
                {
                    return IsNewKeyPress(Keys.Up);
                }
                else
                {
                    return IsKeyPress(Keys.Up);
                }
             } 
        }

        // sagt, ob die Pfeiltaste unten gedrückt wurde
        public bool Down 
        {
            get
            {
                if (ScreenManager.gameState == GameState.Play) return IsNewKeyPress(Keys.Down); 
                  else return IsKeyPress(Keys.Down); } 
        }

        // sagt, ob die Taste W gedrückt wurde
        public bool Left
        {
            get
            {
                if (ScreenManager.gameState == GameState.Play) return IsNewKeyPress(Keys.Left);
                else return IsKeyPress(Keys.Left);
            }
        }

        // sagt, ob die Taste S gedrückt wurde
        public bool Right
        {
            get
            {
                if (ScreenManager.gameState == GameState.Play) return IsNewKeyPress(Keys.Right);
                else return IsKeyPress(Keys.Right);
            }
        }
        
        // Updated den Keyboardzustand und lässt uns den neuen Zustand abfragen
        public void Update() 
        {
            LastKeyboardState = CurrentKeyboardState; 
            CurrentKeyboardState = Microsoft.Xna.Framework.Input.Keyboard.GetState(); 
        } 
        
        public bool IsKeyPress(Keys key) 
        { 
            return CurrentKeyboardState.IsKeyDown(key); 
        }
        
        public bool IsNewKeyPress(Keys key) 
        { 
            return (LastKeyboardState.IsKeyUp(key) && CurrentKeyboardState.IsKeyDown(key)); 
        } 
    } 
}